unit URotinaAnalisaResumoEstoque;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, URotinasBase, ComCtrls, StdCtrls, Buttons, ExtCtrls, DB,
  DBTables, DBClient, Grids, DBGrids;

type
  TFRotinaAnalisaResumoEstoque = class(TFRotinasBase)
    edCompetencia: TDateTimePicker;
    DateTimePicker1: TDateTimePicker;
    QProdutos: TQuery;
    QAux: TQuery;
    CDSPesquisa: TClientDataSet;
    DBGrid1: TDBGrid;
    DSPesquisa: TDataSource;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnExecClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FRotinaAnalisaResumoEstoque: TFRotinaAnalisaResumoEstoque;

implementation

{$R *.dfm}

procedure TFRotinaAnalisaResumoEstoque.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin

  inherited;
  FRotinaAnalisaResumoEstoque.Release;
  FRotinaAnalisaResumoEstoque := Nil;
end;

procedure TFRotinaAnalisaResumoEstoque.BtnExecClick(Sender: TObject);
const SQL_PESQUISA =
'    select distinct'+
'    resumosaldoestoque.resu_produto,'+
'    produto.prod_descricaoent,'+
'    produto.prod_unidsaida,'+
'    COALESCE '+
'    (( '+
'    select resumosaldoestoque.resu_saldo '+
'    from resumosaldoestoque '+
'    where (resumosaldoestoque.resu_mes_fechamento = %s)and '+
'    (resumosaldoestoque.resu_ano_fechamento = %s)and '+
'    (resumosaldoestoque.resu_produto = %s) and '+
'    (resumosaldoestoque.resu_geral_local = 0)),0) as saldoMES_01, '+
'    COALESCE '+
'    (( '+
'    select resumosaldoestoque.resu_custo_medio_unitario '+
'    from resumosaldoestoque '+
'    where (resumosaldoestoque.resu_mes_fechamento = %s)and '+
'    (resumosaldoestoque.resu_ano_fechamento = %s)and '+
'    (resumosaldoestoque.resu_produto = %s) and '+
'    (resumosaldoestoque.resu_geral_local = 0)),0) as VU_MES_01, '+
'    COALESCE '+
'    (( '+
'    select resumosaldoestoque.resu_custo_medio_total '+
'    from resumosaldoestoque '+
'    where (resumosaldoestoque.resu_mes_fechamento = %s)and '+
'    (resumosaldoestoque.resu_ano_fechamento = %s)and '+
'    (resumosaldoestoque.resu_produto = %s) and '+
'    (resumosaldoestoque.resu_geral_local = 0)),0) as VT_MES_01, '+
'    COALESCE '+
'    (( '+
'    select resumosaldoestoque.resu_saldo '+
'    from resumosaldoestoque '+
'    where '+
'    (resumosaldoestoque.resu_ano_fechamento = %s)and '+
'    (resumosaldoestoque.resu_mes_fechamento = %s)and '+
'    (resumosaldoestoque.resu_produto = %s) and '+
'    (resumosaldoestoque.resu_geral_local = 0)),0 ) as saldoMES_02, '+
'    COALESCE '+
'    (( '+
'    select resumosaldoestoque.resu_custo_medio_unitario '+
'    from resumosaldoestoque '+
'    where (resumosaldoestoque.resu_mes_fechamento = %s)and '+
'    (resumosaldoestoque.resu_ano_fechamento = %s)and '+
'    (resumosaldoestoque.resu_produto = %s) and '+
'    (resumosaldoestoque.resu_geral_local = 0)),0) as VU_MES_02, '+
'    COALESCE '+
'   (( '+
'    select resumosaldoestoque.resu_custo_medio_total '+
'    from resumosaldoestoque '+
'    where (resumosaldoestoque.resu_mes_fechamento = %s)and '+
'    (resumosaldoestoque.resu_ano_fechamento = %s)and '+
'    (resumosaldoestoque.resu_produto = %s) and '+
'    (resumosaldoestoque.resu_geral_local = 0)),0 ) as VT_MES_02, '+
'    produto.usuario_cadastro, '+
'    produto.data_cadastro '+
'    FROM resumosaldoestoque '+
'    inner join produto on (produto.prod_codigo = resumosaldoestoque.resu_produto) '+
'    where '+
'    produto.prod_codigo = %s ';


const SQL_AUX =
 '   select '+
 '   resumosaldoestoque.resu_produto '+
 '   FROM resumosaldoestoque '+
 '   where '+
 '    ((resumosaldoestoque.resu_mes_fechamento = %s)    OR '+
 '    (resumosaldoestoque.resu_mes_fechamento  = %s))   AND '+
 '    ((resumosaldoestoque.resu_ano_fechamento = %s)    OR '+
 '    (resumosaldoestoque.resu_ano_fechamento  = %s))   AND '+
 '    (resumosaldoestoque.resu_saldo > 0)and '+
 '    (resumosaldoestoque.resu_geral_local = 0) ';

begin

   if CDSPesquisa.Active then          // se estiver ativo...
    begin
      CDSPesquisa.EmptyDataSet;
      CDSPesquisa.Close;
    end;

    CDSPesquisa.FieldDefs.Clear;
    CDSPesquisa.FieldDefs.Add('PRODUTO'       ,ftInteger,   0);
    CDSPesquisa.FieldDefs.Add('PROD_DESC'     ,ftString,    150);
    CDSPesquisa.CreateDataSet;
    CDSPesquisa.Open;

 try
  QProdutos.Close;
  QProdutos.SQL.Clear;
  QProdutos.SQL.Add(format(SQL_AUX,[Formatdatetime('MM',edCompetencia.Datetime),
                                                  Formatdatetime('MM',DateTimePicker1.Datetime),
                                                  Formatdatetime('YYYY',edCompetencia.Datetime),
                                                  Formatdatetime('YYYY',DateTimePicker1.Datetime)]));
  QProdutos.Open;

  Except
    ShowMessage('Erro ao Selecionar os produtos.');
    exit;
  end;

  if QProdutos.IsEmpty then
  begin
   ShowMessage('Nenhum produto encontrado.');
   exit;
  end;

  QProdutos.First;

  while NOT(QProdutos.Eof) do
  begin

    try
     QAux.Close;
     QAux.SQL.Clear;
     QAux.SQL.Add(Format(SQL_PESQUISA,[QuotedStr(Formatdatetime('MM',edCompetencia.Datetime)),
                                       QuotedStr(Formatdatetime('YYYY',edCompetencia.Datetime)),
                                       QProdutos.FieldByName('resu_produto').AsString,

                                       QuotedStr(Formatdatetime('MM',edCompetencia.Datetime)),
                                       QuotedStr(Formatdatetime('YYYY',edCompetencia.Datetime)),
                                       QProdutos.FieldByName('resu_produto').AsString,

                                       QuotedStr(Formatdatetime('MM',edCompetencia.Datetime)),
                                       QuotedStr(Formatdatetime('YYYY',edCompetencia.Datetime)),
                                       QProdutos.FieldByName('resu_produto').AsString,

                                       QuotedStr(Formatdatetime('MM',DateTimePicker1.Datetime)),
                                       QuotedStr(Formatdatetime('YYYY',DateTimePicker1.Datetime)),
                                       QProdutos.FieldByName('resu_produto').AsString,

                                       QuotedStr(Formatdatetime('MM',DateTimePicker1.Datetime)),
                                       QuotedStr(Formatdatetime('YYYY',DateTimePicker1.Datetime)),
                                       QProdutos.FieldByName('resu_produto').AsString,

                                       QuotedStr(Formatdatetime('MM',DateTimePicker1.Datetime)),
                                       QuotedStr(Formatdatetime('YYYY',DateTimePicker1.Datetime)),
                                       QProdutos.FieldByName('resu_produto').AsString,

                                       QProdutos.FieldByName('resu_produto').AsString]));
     QAux.Open;
    Except
     ShowMessage('Erro ao carregar tabela RESUMOSALDOESTOQUE.');
     exit;
    end;

     CDSPesquisa.Insert;
     CDSPesquisa.FieldByName('PRODUTO').AsInteger:= QAux.FieldByName('resu_produto').AsInteger;
     CDSPesquisa.FieldByName('PROD_DESC').AsString:= QAux.FieldByName('prod_descricaoent').AsString;
     CDSPesquisa.Append; 

   QProdutos.Next;
  end;


  CDSPesquisa.Open;


  inherited;

end;

procedure TFRotinaAnalisaResumoEstoque.FormCreate(Sender: TObject);
begin
  inherited;
  edCompetencia.Date := now;
  DateTimePicker1.Date := now;
end;

end.
